#!/usr/bin/env bash

YARA=$(type -P yara)
CONFIG_PATH='/etc/phpmalwarefinder/php.yar'

if [ ! -x "$YARA" ]
then
    YARA='./yara'
    if [ ! -x "$YARA" ]
    then
        echo 'Unable to find yara in your $PATH, and in the current directory.'
        exit 0
    fi
fi

if [ ! -f "$CONFIG_PATH" ]
then
    CONFIG_PATH="$(dirname "$0")/php.yar"
fi

needle_in_haystack() {

  needle=$(mktemp)
  grep -E '(PasswordProtection|Websites|TooShort|NonPrintableChars)' $1 > $needle
  if [ ! "$(wc -l "$needle" | awk '{print $1}')" = "0" ]; then
      echo "================================================="
      echo "You should take a look at the files listed below:"
      cat "$needle"
  fi;
  rm "$needle"
}

show_help() {
    cat << EOF
Usage ${0##*/} [-cfhtvl] <file|folder> ...
    -c  Optional path to a rule file
    -f  Fast mode
    -h  Show this help message
    -t  Specify the number of threads to use (8 by default)
    -v  Verbose mode
EOF
}

OPTIND=1
while getopts "c:fht:v" opt; do
    case "$opt" in
        c)
            CONFIG_PATH=${OPTARG}
            ;;
        f)
            OPTS="${OPTS} -f"
            ;;
        h)
            show_help
            exit 0
            ;;
        t)
            OPTS="${OPTS} --threads=${OPTARG}"
            ;;
        v)
            OPTS="${OPTS} -s"
            ;;
        '?')
            show_help
            exit 1
            ;;
    esac
done
shift "$((OPTIND-1))"

if [ ! -e "${CONFIG_PATH}" ]
then
    echo "The configuration file ${CONFIG_PATH} doesn't exist. Please give me a valid file."
    exit 1
fi

if [ -z "$@" ]
then
    show_help
    exit 1
fi


# Include correct yara rule
OPTS="${OPTS} -r ${CONFIG_PATH}"

# Copy outpout to temporary file
output=$(mktemp)
# delete trailing slash for directories to prevent double slash (issue #40)
target=$(echo "$@" | sed s'#/$##')
# Execute rules
$YARA $OPTS $target |tee $output 

needle_in_haystack "$output"
rm "$output"
